﻿using System;
using System.IO.IsolatedStorage;
using System.Xml.Serialization;

namespace Black.Minecraft.Editor.Models
{
    /// <summary>
    /// Définit les options de l'application
    /// </summary>
    [Serializable]
    [XmlRoot(ElementName = "Options")]
    public class Options
    {
        #region Propriétés

        /// <summary>
        /// Obtient ou définit si on fait une copie de sauvegarde
        /// </summary>
        [XmlElement(typeof(bool), ElementName = "BackupFile")]
        public bool BackupFile
        {
            get;
            set;
        }

        /// <summary>
        /// Obtient ou définit le dernier fichier édité
        /// </summary>
        [XmlElement(typeof(string), ElementName = "LastFile")]
        public string LastFile
        {
            get;
            set;
        }

        /// <summary>
        /// Obtient ou définit si charge le dernier fichier
        /// </summary>
        [XmlElement(typeof(bool), ElementName = "LoadLastFile")]
        public bool LoadLastFile
        {
            get;
            set;
        }

        #endregion

        #region Constructeur

        /// <summary>
        /// Constructeur de la classe
        /// </summary>
        public Options()
        {
            this.BackupFile = true;
            this.LoadLastFile = false;
        }

        #endregion

        #region Fonctions statiques

        /// <summary>
        /// Renvoi les options
        /// </summary>
        /// <returns>Détail des options</returns>
        public static Options GetOptions()
        {
            Options result = null;

            // Ouverture de l'isolatedstorage

            using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForAssembly())
            {
                // Vérification existance fichier

                if (!store.FileExists("options.xml"))
                    return (new Options());

                // Overture du fichier

                using (IsolatedStorageFileStream stream = store.OpenFile("options.xml", System.IO.FileMode.Open))
                {
                    // Création du sérialiser

                    XmlSerializer serializer = new XmlSerializer(typeof(Options), new XmlRootAttribute("Root"));
                    result = (Options)serializer.Deserialize(stream);
                }
            }

            // On retourne la liste

            return (result);
        }

        /// <summary>
        /// Affecte les options
        /// </summary>
        /// <param name="item">Détail des options</param>
        public static void SetOptions(Options item)
        {
            // Ouverture de l'isolatedstorage

            using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForAssembly())
            {
                // Overture du fichier

                using (IsolatedStorageFileStream stream = store.OpenFile("options.xml", System.IO.FileMode.Create))
                {
                    // Création du sérialiser

                    XmlSerializer serializer = new XmlSerializer(typeof(Options), new XmlRootAttribute("Root"));
                    serializer.Serialize(stream, item);
                }
            }
        }

        #endregion
    }
}
